﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using WLMCoreLibrary;
using SAW_Core;
using System.Configuration;

namespace SAWPOS
{

    public partial class FormularioImportador : Form
    {
        public event EventHandler ImportComplete;

        private string[] _listaCampos;
        private int _totalCampos;
        private int _CampoPrecio;
        private string _rutaArchivoImportacion;

        public string RutaArchivoImportacion
        {
            get { return _rutaArchivoImportacion; }
            set { _rutaArchivoImportacion = value; }
        }
        private string[] _itemsImportacion = { "", "modelo", "SKU", "clave", "descripcion", "precio", "existencia" };

        public string[] ListaCampos
        {
            get { return _listaCampos; }
            set { _listaCampos = value; }
        }
        public FormularioImportador()
        {
            InitializeComponent();

        }

        public void MostrarCamposImportacion()
        {

        }



        private void btnImportProcess_Click(object sender, EventArgs e)
        {
            System.Windows.Forms.OpenFileDialog openFileDialog = new System.Windows.Forms.OpenFileDialog();
            openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
            openFileDialog.Filter = "Archivo de datos XML (*.xml)|*.xml";
            if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string FileName = openFileDialog.FileName;
                ImportProcess(FileName);

            }
        }

        private void ImportProcess(string xmlFileRoute)
        {
            XmlDocument data = new XmlDocument();
            data.Load(xmlFileRoute);
            int counter=0;
            XmlNodeList dataList=data.GetElementsByTagName("Row");
            progressImporter.Maximum = dataList.Count;
            dbConnector conexion = new dbConnector(ConfigurationSettings.AppSettings["cadenaConexion"].ToString());
            ProductoCategoria categoria=new ProductoCategoria(); ;
            ProductoLinea linea=new ProductoLinea();
            ProductoMarca marca= new ProductoMarca();
            foreach (XmlNode importItem in dataList)
            {
                try
                {
                    bool isNewProduct=false;
                    string claveProducto=importItem.ChildNodes[0]
                        .InnerText.Replace("-", "").Replace("\"", "").Replace("'", "").Replace(" ", "").Replace("´", "");
                    string descripcionProducto=importItem.ChildNodes[1].InnerText;
                    decimal precioProducto=WLMFunctions.MonedaADecimal(importItem.ChildNodes[2].InnerText);
                    decimal precioMayoreo=WLMFunctions.MonedaADecimal(importItem.ChildNodes[3].InnerText);
                    decimal precioCompra=WLMFunctions.MonedaADecimal(importItem.ChildNodes[4].InnerText);
                    decimal stockProducto=WLMFunctions.MonedaADecimal(importItem.ChildNodes[5].InnerText);
                    string unidadMedidaProducto=importItem.ChildNodes[6].InnerText;
                    string modeloProducto=importItem.ChildNodes[7].InnerText;
                    string marcaProducto=importItem.ChildNodes[8].InnerText;
                    string categoriaProducto=importItem.ChildNodes[9].InnerText;
                    string lineaProducto=importItem.ChildNodes[10].InnerText;

                    Producto  producto= new Producto(claveProducto, ref conexion);
                    if (producto.id == 0)
                    {
                        producto = new Producto(ref conexion);
                        isNewProduct = true;
                    }
                    producto.Clave = claveProducto;
                    producto.Descripcion = descripcionProducto;
                    producto.Precio1 = precioProducto;
                    producto.Precio2 = precioMayoreo;
                    producto.UltimoPrecioCompra = precioCompra;
                    if(!isNewProduct)
                        producto.Stock += stockProducto;
                    else
                        producto.Stock = stockProducto;
                    producto.UnidadMedida = unidadMedidaProducto;
                    producto.Modelo = modeloProducto;
                    if (marcaProducto != marca.NombreMarca)
                        marca = new ProductoMarca(marcaProducto, ref conexion);
                    if (marca.id == 0)
                    {
                        marca = new ProductoMarca(ref conexion);
                        marca.NombreMarca = marcaProducto;
                        marca.Save();
                    }
                    producto.idMarca = marca.id;
                    if (categoriaProducto != categoria.NombreCategoria)
                        categoria = new ProductoCategoria(categoriaProducto, ref conexion);
                    if (categoria.id == 0)
                    {
                        categoria = new ProductoCategoria(ref conexion);
                        categoria.NombreCategoria = categoriaProducto;
                        categoria.Save();
                    }
                    producto.idCategoria = categoria.id;
                    if (lineaProducto != linea.NombreLinea)
                        linea = new ProductoLinea(lineaProducto, ref conexion);
                    if (linea.id == 0)
                    {
                        linea = new ProductoLinea(ref conexion);
                        linea.NombreLinea = lineaProducto;
                        linea.Save();
                    }
                    producto.idLinea = linea.id;
                    if (producto.UnidadMedida == "")
                        producto.UnidadMedida = "Pza";
                    producto.Save();
                }
                catch
                {
                }
                counter++;
                progressImporter.Value = counter;
                //if (counter == 10)
                //    return;
            }
            conexion.CloseConnection();
            ImportComplete(this,new EventArgs());
        }

        private void ProcesoImportacion()
        {

        }

    }
}
